package Lesson02;

//分别用串行和并行做两轮10亿次累加操作
//serial串行的完成一系列运算，concurrency使用两个线程并行的完成同样的运算

public class Demo_201 {
    //大数可以使用_分隔符
    private static final long count = 10_0000_0000;

    public static void main(String[]args) throws InterruptedException{
        //使用并发方式
        concurrency();
        //使用串行方式
        serial();
    }

    //记录开始时间
    private static void concurrency() throws InterruptedException{
        long begin = System.nanoTime();  //记录当前系统的纳秒级时间戳

        //利用一个线程计算a的值
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                int a =0;
                for (long i=0;i<count;i++){
                    a--;
                }
            }
        });
        thread.start();
        //主线程内计算b的值
        int b =0;
        for (long i=0;i<count;i++){
            b--;
        }
        //等待thread线程运行结束，哪个方法调用jin方法，就是主线程
        thread.join();

        //统计耗时
        long end = System.nanoTime();
        double ms = (end - begin)*1.0 / 1000 / 1000;
        System.out.printf("并发: %f 毫秒%n",ms);
    }
    private static void serial(){
        //全部在主线程内计算a,b的值
        long begin = System.nanoTime();
        int a=0;
        for (long i=0;i<count;i++){
            a--;
        }
        int b=0;
        for (long i=0;i<count;i++){
            b--;
        }
        long end = System.nanoTime();
        double ms = (end - begin) * 1.0 / 1000 / 1000;
        System.out.printf("串行: %f 毫秒%n",ms);
    }
}


